package com.spzx.product.api;

import com.spzx.common.core.constant.SecurityConstants;
import com.spzx.common.core.constant.ServiceNameConstants;
import com.spzx.common.core.domain.R;
import com.spzx.product.api.domain.vo.CategoryVo;
import com.spzx.product.api.factory.RemoteCategoryFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;

import java.util.List;

/**
 * TODO 商品服务openFile接口
 * contextId ioc容器里面的bean的id
 * value 指定远程调用的服务名称 通过这个名称到注册中心查找服务，拉取服务列表进行远程调用
 * fallbackFactory 设置降级处理类 远程调用出问题了 都找降级处理类返回兜底结果
 */
@FeignClient(contextId = "remoteCategoryService", value = ServiceNameConstants.PRODUCT_SERVICE,
        fallbackFactory = RemoteCategoryFallbackFactory.class)
public interface RemoteCategoryService {

    /** 声明远程连接接口
     * 由于远程接口声明@innerAuth 注解 切面需要获取请求头 form-source ="inner"
     * 如何设置多个请求？ 参数类型 ：可以Map or MultValueMap or HttpHeaders
     * @param resource 请求头
     * @return 调用远程服务器中的接口 返回的结果 （从数据库中查询到的数据）
     */

    //查询一级分类
    @GetMapping("/category/getOneCategory")
    public R<List<CategoryVo>> getOneCategory(@RequestHeader(SecurityConstants.FROM_SOURCE) String resource);


    /**
     * 查询分类
     * @return
     */
    @GetMapping("/category/tree")
    public R<List<CategoryVo>> tree(@RequestHeader(SecurityConstants.FROM_SOURCE) String resource);
}
